package com.rocketmq.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * @Author 派大星
 * @Description TODO
 * @Date 2025/8/3 19:38
 */
@RestController
public class SeckillController {

    @Autowired
    private StringRedisTemplate redisTemplate;

    private static final String REDIS_KEY = "seckill";

    /**
     * 1. 去重
     * 2. 库存的预扣减
     * 3. 消息放入mq
     * 秒杀接口
     *
     * @param goodsId
     * @param userId  真实的项目中 要做登录的的验证， 不要直接传递UserId这样的参数
     * @return
     */
    @GetMapping("/seckill")
    public String doSecKill(Integer goodsId, Integer userId) {
        // uk uniqueKey = userId + goodsId 如果需要每天都可以重复抢购的话 就可以加上yyyyMMdd的时间条件
        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyyMMdd");
        // 时区
        ZoneId zoneId = ZoneId.of("Asia/Shanghai");
        String date = pattern.format(LocalDateTime.now(zoneId));
        String uk = userId + "-" + goodsId + "-" + date;
        // setnx 不存在才设置，存在就不设置
        Boolean flag = redisTemplate.opsForValue().setIfAbsent(uk, REDIS_KEY);
        if (!Boolean.TRUE.equals(flag)) {
            return "该用户已经参与过该商品个的抢购了,请勿重复抢购😄";
        }
    }
}
